package com.fivefu.core.hik.services;

import com.fivefu.core.hik.dto.response.ResponsePage;
import com.fivefu.core.hik.vo.VideoOSDVo;

public interface VideoService {

    /**
     * 查询视频播放地址
     * @param cameraIndexCode 监控点编号
     * @param protocol 取流协议(hik,rtsp,rtmp,hls,ws,默认hik)
     * @return
     */
    String getCameraPreviewURLs(String cameraIndexCode, String protocol);

    /**
     * 查询视频历史流播放地址
     * @param cameraIndexCode 监控点编号
     * @param protocol 取流协议(hik,rtsp,rtmp,hls,ws,默认hik)
     * @return
     */
    String getCameraBackURL(String cameraIndexCode,Integer recordLocation, String protocol,String sTime,String eTime);

    /**
     * 云台控制   根据监控点编号进行云台操作
     * @param cameraIndexCode  监控点编号
     * @param action    开始/停止转到预置点
     * @param operation   操作类型
     */
    void operationHolder(String cameraIndexCode, Integer action, String operation,Integer speed, Integer presetIndex);

    /**
     * 3D放大   监控点3D放大
     * @param cameraIndexCode  监控点唯一标识
     * @param startX   开始放大的X坐标
     * @param startY   开始放大的Y坐标
     * @param endX     结束放大的X坐标
     * @param endY     结束放大的Y坐标
     */
    void threeDAmplification(String cameraIndexCode, Integer startX, Integer startY, Integer endX, Integer endY);

    /**
     * 手动录像-录像锁定与解锁
     * @param cameraIndexCode  监控点唯一标识
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param lockTime   锁定时长
     */
    void lockVideo(String cameraIndexCode, String startTime, String endTime, Integer lockTime);

    /**
     * 手动录像-开关手动录像
     * @param cameraIndexCode  监控点唯一标识
     * @param operation        操作类型（1：开始，2：关闭）
     * @param recordType       录像类型
     */
    void switchVideo(String cameraIndexCode, Integer operation,Integer recordType);

    /**
     * 手动录像-获取手动录像状态
     * @param cameraIndexCode  监控点唯一标识
     */
    void getVideoStatus(String cameraIndexCode);

    /**
     * 手动录像-查询手动录像编号
     * @param cameraIndexCodes  监控点编号集合
     */
    void getVideoNumber(String[] cameraIndexCodes);

    /**
     *  预置点管理-设置预置点信息
     * @param cameraIndexCode  监控点唯一标识
     * @param presetName       预置点名称
     * @param presetIndex      预置点编号
     */
    void setPresetPoint(String cameraIndexCode, String presetName, Integer presetIndex);

    /**
     * 预置点管理-查询预置点信息
     * @param cameraIndexCode  监控点唯一标识
     */
    ResponsePage getPresetPoint(String cameraIndexCode);

    /**
     * 预置点管理-删除预置点信息
     * @param cameraIndexCode  监控点唯一编号
     * @param presetIndex      预置点编号
     */
    void deletePresetPoint(String cameraIndexCode, String presetIndex);

    /**
     * 预置点管理-批量获取监控点的预置点信息
     * @param cameraIndexCodes  监控点唯一标识集和
     */
    void batchQueryCameraIndexCodeInfo(String[] cameraIndexCodes);

    /**
     * 图片获取-平台抓拍计划图片获取
     * @param sTime  开始时间
     * @param eTime  结束时间
     */
    void getPlatformSnapped(String sTime, String eTime);

    /**
     * 图片获取-视频图片查询
     * @param svrIndexCode  图片存储服务器唯一标识
     * @param picUri        图片的相对地址
     */
    void getVideoImages(String svrIndexCode, String picUri);

    /**
     * 巡航路径-查询巡航路径
     * @param cameraIndexCode    监控点唯一编号
     */
    void getCruisePath(String cameraIndexCode);

    /**
     * 巡航路径-编辑巡航路径
     * @param cameraIndexCode   监控点唯一标识
     * @param cruiseIndex       巡航路径序号
     * @param presetPointIndex  预置点序号
     * @param speed             速度
     * @param standingTime      停留时间
     */
    void editorCruisePath(String cameraIndexCode, Integer cruiseIndex, Integer presetPointIndex, Integer speed, Integer standingTime);

    /**
     * 巡航路径-删除巡航路径
     * @param cameraIndexCode   监控点唯一编号
     * @param cruiseIndex       巡航路径序号
     */
    void deleteCruisePath(String cameraIndexCode, Integer cruiseIndex);

    /**
     * 巡航路径-巡航路径控制
     * @param cameraIndexCode   监控点唯一编号
     * @param command           控制命令
     * @param cruiseIndex       巡航路径序号
     */
    void controlCruisePath(String cameraIndexCode, String command, String cruiseIndex);

    /**
     * 视频参数配置-获取视频OSD显示参数
     * @param cameraIndexCode   监控点唯一编号
     */
    void getVideoOSDDisplayParameters(String cameraIndexCode);

    /**
     * 视频参数配置-获取视频叠加字符串参数
     * @param cameraIndexCode  监控点唯一编号
     */
    void getVideoOverLayString(String cameraIndexCode);

    /**
     * 视频参数配置-获取预览画面参数配置
     * @param cameraIndexCode  监控点唯一编号
     */
    void getVideoParams(String cameraIndexCode);

    /**
     * 视频参数配置-设置视频OSD显示参数
     * @param videoOSDVo
     */
    void setOSDParams(VideoOSDVo videoOSDVo);

    /**
     * 视频参数配置-设置预览画面参数配置
     * @param cameraIndexCode  监控点唯一编号
     * @param brightness       亮度
     * @param hue              灰度
     * @param contrast         对比度
     * @param saturation       饱和度
     */
    void setPreViewPictureParams(String cameraIndexCode,Integer brightness,Integer hue,Integer contrast,Integer saturation);

    /**
     * 视频参数配置-设置视频叠加字符串参数
     * @param cameraIndexCode    监控点唯一编号
     * @param showString         叠加字符串文本内容
     * @param isShow            是否显示叠加内容
     * @param xPos           显示X坐标
     * @param yPos           显示Y坐标
     */
    void setVideoOverLayString(String cameraIndexCode, String showString, Integer isShow, Integer xPos, Integer yPos);

    /**
     * 抓图
     * @param cameraIndexCode  监控点唯一标识
     */
    String getManualCapture(String cameraIndexCode);

    /**
     * 语音对讲
     * @param cameraIndexCode  监控点唯一标识
     */
    void getCamerasTalkURLs(String cameraIndexCode);
}
